#include <stdio.h>    // 提供输入输出函数，如 printf、scanf、fgets
#include <stdlib.h>   // 提供转换函数，如 atoi
#include <string.h>   // 提供字符串处理函数，如 strcmp、strcpy、strtok、strlen

#define MAX_DIRECTORIES 1000   // 最大目录数
#define MAX_ID_LEN 32          // 目录ID最大长度
#define MAX_CHILDREN 100       // 每个目录最多的子目录数量

// step 1# 定义目录结构体
typedef struct {
    char id[MAX_ID_LEN];                            // 目录ID
    int size;                                       // 目录大小
    int childCount;                                 // 子目录数量
    char children[MAX_CHILDREN][MAX_ID_LEN];        // 子目录ID列表
} Directory;

Directory dirs[MAX_DIRECTORIES];  // 存储所有目录信息的数组
int dirCount = 0;                 // 当前目录数量

// step 2# 查找指定ID目录在数组中的索引
int findIndexById(const char* id) {
    for (int i = 0; i < dirCount; i++) {
        if (strcmp(dirs[i].id, id) == 0) {          // 若找到ID匹配的目录
            return i;                               // 返回其索引
        }
    }
    return -1;  // 未找到则返回 -1
}

// step 3# 递归计算某目录及其所有子目录的总大小
int dfs(const char* id) {
    int index = findIndexById(id);                  // 查找该ID对应的目录索引
    if (index == -1) return 0;                      // 若未找到则返回0

    int total = dirs[index].size;                   // 初始总大小为当前目录的大小
    for (int i = 0; i < dirs[index].childCount; i++) {
        total += dfs(dirs[index].children[i]);      // 递归累加所有子目录的大小
    }
    return total;                                   // 返回总大小
}

int main() {
    // step 4# 读取目录数量 m 和目标目录编号 n
    int m, n;
    scanf("%d %d\n", &m, &n);                        // 输入 m:目录数, n:目标ID

    // step 5# 读取每一行目录信息并解析
    for (int i = 0; i < m; i++) {
        char line[512];
        fgets(line, sizeof(line), stdin);           // 读取一整行目录信息

        char* token = strtok(line, " ");
        strcpy(dirs[dirCount].id, token);           // 提取并存储目录ID

        token = strtok(NULL, " ");
        dirs[dirCount].size = atoi(token);          // 提取并存储目录大小

        token = strtok(NULL, "\n");                 // 提取子目录字段（可能是"[]"）
        dirs[dirCount].childCount = 0;              // 初始化子目录数量

        if (strcmp(token, "[]") != 0) {              // 如果有子目录
            token[strlen(token) - 1] = '\0';         // 去掉结尾的 ']'
            char* childStr = token + 1;              // 去掉开头的 '['
            char* child = strtok(childStr, ",");     // 提取第一个子目录ID
            while (child) {
                strcpy(dirs[dirCount].children[dirs[dirCount].childCount++], child);  // 存储子目录ID
                child = strtok(NULL, ",");           // 继续提取下一个子目录
            }
        }

        dirCount++;                                  // 累加目录数量
    }

    // step 6# 将目标目录编号转为字符串以匹配ID
    char targetId[MAX_ID_LEN];
    sprintf(targetId, "%d", n);                      // 将整数n转换为字符串形式的ID

    // step 7# 调用DFS函数计算总大小
    int result = dfs(targetId);                      // 递归求目标目录总大小
    printf("%d\n", result);                          // 输出结果

    return 0;
}
